dofile "lib/radical.lua"

function tile(s) 
  return const.path.gfx.."game/visit/"..s..".jpg"; 
end

function cm_tile(s) 
  return const.path.gfx.."game/common/"..s..".jpg"; 
end

function dxml(s)
  return const.path.dlg.."2-eye/visit/"..s..".xml";
end

visit = engine.state {
   _smoke1      = false --Peter smokes a cigarette (1)
  ,_smoke2      = false --Peter smokes a cigarette (2)
  ,_smokeback   = ''    --Return link after smoking
  
  ,_bottle      = false --Peter took broken bottle
  ,_room        = false --Peter checked room number
  ,_sit         = false --Peter is sitting
  ,_guitar      = false --Guitar music is playing
  
  ,_caminv      = 0     --Cam investigation (1,2,3)
  ,_noopen      = false --Peter shouldn't open cam
  ,_photo       = false --Peter can take a look at photo
  ,_call        = false --Somebody called Peter
}

visit_player = musplayer.player {
   mus("juxtaposition"):inside("elevator"):loop()
  ,mute():inside("bell1"):always()
  ,sfx("doorbell"):inside("bell2"):always()
  ,sfx("doorunlockopen"):inside("bell3"):always()
  ,mus("rock_silent"):inside("apartment_dlg"):loop()
  ,mus("clockticking2"):inside("cabinet"):loop()
  ,mus("guitar"):inside("cabinet_dlg"):when("visit._guitar"):loop()
  ,mute():fade(3000,3000):inside("gopause")
  
  ,sfx("footsteps2"):inside("stairs_up"):always()
  ,sfx("footsteps2"):inside("stairs_down"):always()
  
  ,mus("satiate"):inside("pan1"):always()
  ,mute():inside("pan7"):fade(4000,4000):always()
}

main = engine.main {
   start        = chain_ {
                     episode_("2-visit")
                    ,musplayer_("visit_player")
                    ,walk_("elevator")
                  }
  ,finish       = gamefile_("2-eye/fall.lua")
}

cigarette = staticitem {
   dsc          = "^^От зажженной {сигареты} в руке исходит слабый ароматный дым."
  ,cnd          = if_("not visit._smoke1 or not visit._smoke2")
  ,act          = chain_ { exec_("visit._smokeback=deref(here())"), walk_("smokeslide1") }
}

smokeslide1 = slidedown {
   tile         = tile "smoke"
  ,x            = 0
  ,y            = 2
  ,fps          = 30
  ,step         = 2
  ,next         = "smokeslide2"
}

smokeslide2 = pause {
   time         = 1
  ,fading       = 30
  ,next         = choose_ {
                     ["default"] = walk_("smoke1")
                    ,["visit._smoke1"] = walk_("smoke2")
                  }
}

smoke1 = cutscene {
   bounds       = { 200, 230, 600 }
  ,dsc          = [[Сколько он уже не курил? Почти полгода? Последнее время он даже не вспоминал о сигаретах. Однако сегодня 
                    он почему-то не мог не закурить. С самого утра ему страшно хотелось сигарету. Он мучался от какой-то необъяснимой
                    внезапной ломки, как будто все это время только и ждал этого дня, чтобы наконец вновь закурить.]]
  ,enter        = set_("visit._smoke1")
  ,next         = exec_("walk(visit._smokeback)")
}

smoke2 = cutscene {
   bounds       = { 200, 260, 600 }
  ,dsc          = [[Вот и все, он докурил. Ему даже немного жаль, но он не будет закуривать еще одну. Это была последняя сигарета,
                    он бросил курить полгода назад.]]
  ,enter        = set_("visit._smoke2")
  ,next         = exec_("walk(visit._smokeback)")
}

entrance = scene {
   tile         = tile "entrance"
  ,bounds       = { 200, 160, 620 }
  ,obj          = { "exit_door", "mailbox", "cigarette" }
  ,nav          = {
                     up = vw("На улицу"):cnd("false", "Пока еще рано уходить.")
                    ,down = vw("К лестнице", "elevator")
                  }
}

exit_door = staticitem {
   dsc          = "Через заплывшее дверное стекло видно солнечную утреннюю {улицу}."
  ,showonce     = true
  ,act          = [[Самая окраина -- всего пару километров на запад и можно упереться в границу со старым городом. Поговаривали 
                    даже, что здесь стоит слабый радиационный фон, хотя это, конечно же, неправда.]]
}

mailbox = staticitem {
   dsc          = choose_ {
                     ["default"] = "Слева на стене висят затертые почтовые {ящики}."
                    ,["visit._room"] = "Слева на стене висят затертые почтовые ящики."
                  }
  ,act          = [[На ящиках есть таблички с фамилиями жильцов и номерами квартир. Однако таблички эти на многих ящиках заклеены какими-то 
                    листками бумаги -- как будто кто-то решил зло подшутить над почтальоном. А заодно и над большей частью жильцов.]]
}

elevator = scene {
   tile         = tile "window"
  ,bounds       = { 180, 130, 680 }
  ,dsc          = [[Подъезд выглядит заброшенным и пустым. Большинство потолочных ламп перегорели, а мутные окна почти не пропускают свет. 
                    Кажется, что уже глубокая ночь, хотя день только начинается.]]
  ,obj          = { "elevator_door", "cigarette" }
  ,nav          = {
                     down = vw("К выходу из подъезда", "entrance")
                    ,up = vw("На лестницу", "stairs_up")
                    ,right = vw("В лифт", "inelevator")
                  }
}

elevator_door = staticitem {
   dsc          = "Двери старого {лифта} открыты."
  ,act          = walk_("inelevator")
}

inelevator = scene {
   tile         = tile "elevator"
  ,bounds       = { 140, nil, 800 }
  ,dsc          = "Судя по всему, лифт давно не работает."
  ,alwaysdsc    = true
  ,obj          = { "bottle" }
  ,nav          = { 
                    down = vw("Выйти", "elevator")
                  }
}

bottle = item {
   nam          = "Разбитая бутылка"
  ,dsc          = "На полу валяется {разбитая бутылка}."
  ,ico          = ico "bottle"
  ,img          = ico "bottle-use"
  ,tak          = "Может, как-нибудь пригодится."
  ,act          = set_("visit._bottle")
  ,use          = chooseuse_ {
                     ["default"] = "В этом нет никакого смысла."
                    ,["mailbox"] = 
                        chain_ { 
                          set_("visit._room"), 
                          drop_("bottle"), 
                          "С помощью бутылки получилось содрать наклейки с ярлычков на нескольких ящиках. На одном^из них оказалось имя - Иван Алексеев. Это как раз тот человек. Он живет в квартире 21." 
                        }
                  }
}

stairs_down_old = slideup {
   tile         = tile "stairs"
  ,fps          = 20
  ,step         = 2
  ,x            = 435
  ,y            = 500
  ,next         = "elevator"
}

stairs_down = slidedown {
   tile         = tile "stairs"
  ,fading       = 0
  ,fps          = 20
  ,step         = 2
  ,x            = 435
  ,y            = 500
  ,next         = "elevator"
}

stairs_up = slideup {
   tile         = tile "stairs"
  ,fps          = 20
  ,step         = 2
  ,x            = 435
  ,y            = 500
  ,next         = choose_ {
                     ["default"] = walk_("stairs")
                    ,["visit._room"] = walk_("door")
                  }
}

stairs = scene {
   tile         = { tile "stairs", 435, 293 }
  ,dsc          = "Какой же он называл номер квартиры? Черт, надо было записать. Никак не получается вспомнить."
  ,alwaysdsc    = true
  ,obj          = { "cigarette" }
  ,nav          = {
                    down = vw("Вниз", "stairs_down")
                  }
}

door = scene {
   tile         = tile "door"
  ,dsc          = "На этом этаже так темно, что почти ничего нельзя разглядеть."
  ,bounds       = { 225, 160, 620 }
  ,obj          = { "door_obj", "cigarette" }
  ,nav          = {
                     down = vw("Вниз", "stairs")
                  }
}

door_obj = staticitem {
   dsc          = choose_ {
                     ["default"] = "Но, кажется, вот {дверь} в квартиру 201."
                    ,["visit._door"] = "Рядом с дверью в квартиру 201 есть {звонок}."
                  }
  ,act          = choose_ {
                     ["default"] = chain_ { set_("visit._door"), "Да, точно. Это квартира Алексеева." }
                    ,["visit._door"] = 
                      choose_ {
                         ["default"] = "Надо бы сначала докурить сигарету."
                        ,["visit._smoke1 and visit._smoke2"] = walk_("bell1")
                      }
                  }
}

bell1 = pause {
   time         = 500
  ,next         = "bell2"
}

bell2 = pause {
   time         = 3500
  ,next         = "bell3"
}

bell3 = pause {
   time         = 3500
  ,next         = "apartment_dlg"
}

apartment_dlg = dialog {
   tile         = { cm_tile "coridor", 500, 20 }
  ,bounds       = { nil, 50, 500 }
  ,dsc          = "-- Здравствуйте! Вы, должно быть, Петр?"
  ,dlg          = dxml "apartment"
}

cabinet = scene {
   tile         = { tile "boxes", 760, 20 }
  ,dsc          = [[Кабинет, как называл его хозяин, выглядит совсем обветшалым, точно здесь в действительности много лет уже никто не живет. 
                    Обои на стенах давно потеряли свой первоначальный цвет, по потолку расползаются трещины, а старый паркет скрипит под ногами.
                    Петру сразу становится как-то неуютно. Он даже начинает сомневаться в том, что ему стоило сюда приходить.^^]]
  ,obj          = { "cabinet_debris", "alexeev", "books", "oldlamp", "oldphone" }
}

cabinet_debris = staticitem {
   dsc          = "На маленьком журнальном столике у стены справа навалены картонные {коробки}."
  ,act          = "Похоже, хозяин так и не распаковал свои вещи. А может, напротив, собирается переезжать."
  ,showonce     = true
}

alexeev = staticitem {
   dsc          = "{Иван Алексеев} сидит за столом и перебирает какие-то бумаги."
  ,act          = walk_("cabinet_dlg")
}

books = staticitem {
   dsc          = "На подоконнике стоят {книги}."
  ,showonce     = true
  ,act          = "Ира как-то рассказывала о своем дяде. Кажется, он драматург, правда, не очень успешный."
}

oldlamp = staticitem {
   dsc          = "{Старая лампа} на столе как будто попала сюда из другой эпохи."
  ,showonce     = true
  ,act          = "Абажур местами прохудился и весь покрыт пылью."
}

oldphone = staticitem {
   dsc          = "{Телефон} у хозяина дома -- дисковый, с питанием прямо от телефонной сети."
  ,showonce     = true
  ,act          = "Петр давно уже таких не видел. Можно подумать, что он и правда перенесся в другое время."
}

cabinet_dlg = dialog {
   tile         = { tile "boxes", 760, 20 }
  ,dsc          = "-- Да вы садитесь!.. Извините за беспорядок, просто я скоро переезжаю, а все никак вещи не соберу."
  ,dlg          = dxml "room"
}

cam1 = scene {
   bounds       = { 200, 260, 600 }
  ,dsc          = "-- Вот, возьмите..."
  ,alwaysdsc    = true
  ,obj          = { "takecam" }
}

takecam = staticitem {
   dsc          = "^^Петр какое-то время удивленно смотрит на камеру, затем {берет ее} у Алексеева."
  ,act          = walk_("cam2")
}

cam2 = scene {
   bounds       = { 200, 220, 600 }
  ,obj          = { "cam", "opencam", "alexeev2" }
}

cam = staticitem {
   dsc          = choose_ {
                     ["visit._caminv==0"] = "Петр держит в руках {старую камеру}."
                    ,["visit._caminv==1"] = "Петр внимательно {рассматривает} фотоаппарат. Ему начинает казаться, что он уже где-то видел эту старую камеру раньше."
                    ,["visit._caminv==2"] = "Петр продолжает {изучать} камеру."
                    ,["visit._caminv==3"] = "Петр неуверенно вертит {фотоаппарат} в руках."
                  }
  ,act          = choose_ {
                     ["visit._caminv==0"] = chain_ { inc_("visit._caminv"), "Этому фотоаппарату, должно быть, лет двадцать, если не больше. Петр уже давно таких не видел." }
                    ,["visit._caminv==1"] = chain_ { inc_("visit._caminv"), "Объектив камеры покрыт пылью, на линзах можно даже заметить тоненькие царапины. У камеры явно была долгая и тяжелая жизнь." }
                    ,["visit._caminv==2"] = chain_ { inc_("visit._caminv"), "Аппарат полностью механический. Рычаг для перемотки пленки, когда-то хромированный, почти полностью облез.^Так же, как и название камеры - Зенит. На объективе можно заметить надпись - HELIOS-44M. Все это ни о чем^не говорит Петру." }
                    ,["visit._caminv==3"] = "Нет, все-таки он никак не может вспомнить, видел ли уже эту камеру раньше."
                  }
}

alexeev2 = staticitem {
   dsc          = "{Алексеев} с интересом наблюдает за Петром."
  ,cnd          = if_("visit._caminv>=2")
  ,act          = walk_("cabinet2_dlg")
}

opencam = staticitem {
   dsc          = "На оборотней стороне камеры есть какая-то крышка и тугой пластиковый {рыжачок}, который не так-то просто подцепить даже ногтем -- видимо, там отсек, в который вставляется пленка."
  ,cnd          = if_("visit._caminv==3 and not visit._noopen")
  ,act          = walk_("opencam_dlg")
}

opencam_dlg = dialog {
   tile         = { tile "boxes", 760, 20 }
  ,dsc          = "-- Вы что хотите сделать?"
  ,dlg          = dxml "cam"
}

cabinet2_dlg = dialog {
   tile         = { tile "boxes", 760, 20 }
  ,dsc          = "-- Ну как? Вам эта камера не знакома?"
  ,dlg          = dxml "room2"
}

cabinet3_dlg = dialog {
   tile         = { tile "boxes", 760, 20 }
  ,dsc          = "-- Да, как видите..."
  ,dlg          = dxml "room3"
}

cabinet4_dlg = dialog {
   tile         = { tile "boxes", 760, 20 }
  ,enter        = sound_("phone")
  ,dsc          = "-- Ну уж что имеем... Скажите, как я понимаю, вы же работаете в этом... бюро. Неужели вы не можете найти ее по своим каналам? Мне казалось, у вас все должно быть просто?"
  ,dlg          = dxml "room4"
}

gopause = pause {
   time         = 2000
  ,fading       = 30
  ,next         = "apartment2_dlg"
}

apartment2_dlg = dialog {
   tile         = { cm_tile "coridor", 500, 20 }
  ,bounds       = { nil, 50, 500 }
  ,dsc          = "-- Ну что ж, был рад знакомству, Петр!"
  ,dlg          = dxml "apartment2"
}


pan1 = pause {
   time         = 1500
  ,next         = "pan2"
}

pan2 = slideright {
   tile         = cm_tile "clouds"
  ,y            = 260
  ,x            = -500
  ,endx         = -300
  ,step         = 2
  ,fps          = 30
  ,next         = "pan3"
}

pan3 = anim {
   frames       = { cm_tile "lightning1", cm_tile "lightning2", cm_tile "lightning1", cm_tile "lightning2" }
  ,fading       = 0
  ,fps          = 5
  ,x            = 360
  ,y            = 0
  ,next         = "pan4"
}

pan4 = slideright {
   tile         = cm_tile "clouds"
  ,fading       = 0
  ,y            = 260
  ,x            = -300
  ,endx         = 0
  ,step         = 2
  ,fps          = 30
  ,next         = "pan5"
}

pan5 = engine.gameroom {
   fps          = 20
  ,step         = 10
  ,tile         = { cm_tile "bridge", 0, 100 }
  ,_frames      = 0
  ,ontimer      = function(s,x,y)
                    s._frames  = s._frames + 1;
                    if s.carcache == nil then
                      s.carcache = sprite.load(cm_tile "car");
                    end
                    if s._carx == nil then
                      s._carx = -150;
                    end
                    if s._carx == 960+150 then
                      s._carx = nil;
                      s._frames = 0;
                      s.carcache = nil;
                      sprite.free(s.carcache);
                      walk("pan6")
                      return;
                    end
                    
                    drawing.clean(s.pic, s._carx-s.step, 163, s.step, 40);
                    sprite.copy(s.carcache, s.pic, s._carx, 163);
                    s._carx = s._carx + s.step;
                  end
}

pan6 = engine.gameroom {
   fps          = 20
  ,step         = 10
  ,tiles        = {
                     { cm_tile "bridge", 0, 460 }
                    ,{ cm_tile "clouds2", 0, -100 }
                  }
  ,_frames      = 0
  ,ontimer      = function(s,x,y)
                    s._frames  = s._frames + 1;
                    if s.carcache == nil then
                      s.carcache = sprite.load(cm_tile "car");
                    end
                    if s._carx == nil then
                      s._carx = -150;
                    end
                    if s._carx == 960+150 then
                      s._carx = nil;
                      s._frames = 0;
                      s.carcache = nil;
                      sprite.free(s.carcache);
                      walk("pan7")
                      return;
                    end
                    
                    drawing.clean(s.pic, s._carx-s.step, 523, s.step, 40);
                    sprite.copy(s.carcache, s.pic, s._carx, 523);
                    s._carx = s._carx + s.step;
                  end
}

pan7 = pause {
   time         = 4000
  ,ondrawbg     = function(s,p)
                    drawing.draw_text_center(p, "Старый город", const.picwidth, 260, "white", const.font, 18);
                    drawing.draw_text_center(p, "13 ЧАСОВ", const.picwidth, 280, "white", const.fontb, 14);
                    return p;
                  end
  ,next         = "main"
}
